// MMORPG游戏状态事件管理器
import type { StateChangeCallback, GameState } from './types';

/**
 * 状态事件管理器类，负责管理状态变化的回调函数
 */
export class StateEventManager {
  // 状态变化回调函数集合
  private stateChangeCallbacks: Set<StateChangeCallback> = new Set();

  /**
   * 注册状态变化回调
   * @param callback 状态变化时执行的回调函数
   * @returns 取消注册的函数
   */
  public onStateChange(callback: StateChangeCallback): () => void {
    this.stateChangeCallbacks.add(callback);
    
    // 返回取消注册的函数
    return () => {
      this.stateChangeCallbacks.delete(callback);
    };
  }

  /**
   * 触发状态变化事件
   * @param fromState 之前的状态
   * @param toState 新的状态
   */
  public triggerStateChange(fromState: GameState, toState: GameState): void {
    if (fromState !== toState) {
      this.stateChangeCallbacks.forEach(callback => {
        try {
          callback(fromState, toState);
        } catch (error) {
          console.error('状态变化回调执行失败:', error);
        }
      });
    }
  }

  /**
   * 清除所有回调函数
   */
  public clearCallbacks(): void {
    this.stateChangeCallbacks.clear();
  }

  /**
   * 获取回调函数数量
   * @returns 回调函数数量
   */
  public getCallbackCount(): number {
    return this.stateChangeCallbacks.size;
  }
}